package com.zw.a.basic.a12.demo05_exercise;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

//案例: 图片加密.
/*
    核心规则:
        用位运算符之  位异或^,  它的规则是: 一个数字被同一个数字位异或两次, 值不变.
        a ^ b ^ b = a
 */
public class Demo02 {
    public static void main(String[] args) throws IOException {
        System.out.println(5 ^ 5 ^ 10);     //10
        System.out.println(2 ^ 3 ^ 3);      //2
        /*
            需求:
                1.对项目下的a.jpg图片进行加密, 获取到一个新的加密图片b.jpg.
                2.对加密后的图片b.jpg进行解密, 获取解密后的图片c.jpg.
         */
        // 1. 创建输入流对象, 关联数据源文件.
        FileInputStream fis = new FileInputStream("day12/data/b.jpg");
        // 2. 创建输出流对象, 关联目的地文件.
        FileOutputStream fos = new FileOutputStream("day12/data/c.jpg");
        // 3. 定义变量, 记录读取到的内容或者有效字节(符)数.
        int len = 0;
        // 4. 循环读取,只要条件满足就一直读, 并将读取到的内容赋值给变量.
        while ((len = fis.read()) != -1) {
            // 5. 将读取到的内容写入到目的地文件中.
            fos.write(len ^ 5);             //这里的5就是密钥
        }
        // 6. 关流, 释放资源.
        fis.close();
        fos.close();
    }
}
